<?php

class Parametro extends CI_Controller {
    
    const INT_OPC_REGISTRAR = 1;
    const INT_OPC_ACTUALIZAR = 2;
    const INT_OPC_ELIMINAR = 3;
    const INT_OPC_UTILIZADO = 4;

    /**
     * Constructor
     * @author Fernando Esteban Valerio
     */
    function __construct() {
        parent::__construct();
        $this->load->model('parametro_model', '', true);
    }

    /**
     * Metodo que muestra la bandeja de parámetros.
     * @author Fernando Esteban Valerio
     * @param int $resultado Opción para mostrar mensaje
     */
    function index($resultado=0) {
        $lstParametroPadre = $this->parametro_model->getListParametro(0);
        $lstParametro = $this->parametro_model->getListParametro();

        $lstEstado = array();
        $lstEstado[INT_ESTADO_PARAM_INACTIVO] = STR_ESTADO_INACTIVO;
        $lstEstado[INT_ESTADO_PARAM_ACTIVO] = STR_ESTADO_ACTIVO;

        $data = array(
            'lstParametroPadre' => $lstParametroPadre,
            'lstParametro' => $lstParametro,
            'lstEstado' => $lstEstado,
            'prefijo' => STR_COD_PARAMETRO
        );

        $data['page_title'] = 'Bandeja de Parámetros';
        switch ($resultado) {
            case self::INT_OPC_REGISTRAR:
                $data['mensaje'] = 'La operación se realizó satisfactoriamente';
                $data['class'] = "alert_success";
                break;

            case self::INT_OPC_ACTUALIZAR:
                $data['mensaje'] = 'La operación se realizó satisfactoriamente';
                $data['class'] = "alert_success";
                break;

            case self::INT_OPC_ELIMINAR:
                $data['mensaje'] = 'La operación se realizó satisfactoriamente';
                $data['class'] = "alert_success";
                break;

            case self::INT_OPC_UTILIZADO:
                $data['mensaje'] = 'No se puede inactivar el registro, porque está siendo usado en otro proceso';
                $data['class'] = "alert_warning";
                break;
        }
        $this->load->view('parametro/parametro_view', $data);
    }

    /**
     * Metodo para mostrar el formulario de edición de los datos del parámetro.
     * @author Fernando Esteban Valerio
     */
    function accion() {
        $id = filter_input(INPUT_GET, 'id');
        $objParametro = $this->parametro_model->getParametro($id);

        $lstEstado = array();
        $lstEstado[INT_ESTADO_PARAM_INACTIVO] = STR_ESTADO_INACTIVO;
        $lstEstado[INT_ESTADO_PARAM_ACTIVO] = STR_ESTADO_ACTIVO;

        $lstParametro = $this->parametro_model->getListParametro();
        $data = array(
            'page_title' => 'Bandeja de Parámetros',
            'mensaje' => 'Usted puede editar datos',
            'id' => $id,
            'parametro' => $objParametro,
            'lstParametro' => $lstParametro,
            'lstEstado' => $lstEstado
        );

        $this->load->view('parametro/parametro_edit_view', $data);
    }

    /**
     * Metodo para insertar los datos del parámetro.
     * @author Fernando Esteban Valerio
     */
    function insertar() {
        $sessionData = $this->session->userdata('logged_in');
        $data['id_padre'] = filter_input(INPUT_POST, 'idPadre');
        $data['valor_1'] = filter_input(INPUT_POST, 'txtValor1');
        $data['valor_2'] = filter_input(INPUT_POST, 'txtValor2');
        $data['valor_3'] = filter_input(INPUT_POST, 'txtValor3');
        $data['descripcion'] = filter_input(INPUT_POST, 'txtDescripcion');
        $data['estado'] = INT_ESTADO_PARAM_ACTIVO;
        $data['usuario_registro'] = $sessionData['id'];
        $data['fecha_registro'] = date('Y-m-d H:i:s');
        $this->parametro_model->insert($data);
        $this->index(self::INT_OPC_REGISTRAR);
    }

    /**
     * Metodo para editar los datos del parámetro.
     * @author Fernando Esteban Valerio
     */
    function editar() {
        $sessionData = $this->session->userdata('logged_in');
        $data['id_tabla_maestra'] = filter_input(INPUT_POST, 'id');
        $data['id_padre'] = filter_input(INPUT_POST, 'idPadre');
        $data['valor_1'] = filter_input(INPUT_POST, 'txtValor1');
        $data['valor_2'] = filter_input(INPUT_POST, 'txtValor2');
        $data['valor_3'] = filter_input(INPUT_POST, 'txtValor3');
        $data['descripcion'] = filter_input(INPUT_POST, 'txtDescripcion');
        $data['estado'] = filter_input(INPUT_POST, 'idEstado');
        $data['usuario_modificacion'] = $sessionData['id'];
        $data['fecha_modificacion'] = date('Y-m-d H:i:s');
        $this->parametro_model->update($data);
        $this->index(self::INT_OPC_ACTUALIZAR);
    }

    /**
     * Metodo para eliminar un parámetro.
     * @author Fernando Esteban Valerio
     */
    function eliminar() {
        $id = filter_input(INPUT_GET, 'id');
        $lstParametro = $this->parametro_model->existDependencia($id);
        if (count($lstParametro) > 0) {
            $this->index(self::INT_OPC_UTILIZADO);
        } else {
            $sessionData = $this->session->userdata('logged_in');
            $data['id_tabla_maestra'] = $id;
            $data['estado'] = INT_ESTADO_PARAM_INACTIVO;
            $data['usuario_modificacion'] = $sessionData['id'];
            $data['fecha_modificacion'] = date('Y-m-d H:i:s');
            $this->parametro_model->updateEstado($data);
            $this->index(self::INT_OPC_ELIMINAR);
        }
    }

}